/**
 * Software License, Version 1.0
 * 
 * Copyright 2003 The Trustees of Indiana University.  All rights reserved.
 * 
 *
 *Redistribution and use in source and binary forms, with or without 
 *modification, are permitted provided that the following conditions are met:
 *
 *1) All redistributions of source code must retain the above copyright notice,
 * the list of authors in the original source code, this list of conditions and
 * the disclaimer listed in this license;
 *2) All redistributions in binary form must reproduce the above copyright 
 * notice, this list of conditions and the disclaimer listed in this license in
 * the documentation and/or other materials provided with the distribution;
 *3) Any documentation included with all redistributions must include the 
 * following acknowledgement:
 *
 *"This product includes software developed by the Community Grids Lab. For 
 * further information contact the Community Grids Lab at 
 * http://communitygrids.iu.edu/."
 *
 * Alternatively, this acknowledgement may appear in the software itself, and 
 * wherever such third-party acknowledgments normally appear.
 * 
 *4) The name Indiana University or Community Grids Lab or NaradaBrokering, 
 * shall not be used to endorse or promote products derived from this software 
 * without prior written permission from Indiana University.  For written 
 * permission, please contact the Advanced Research and Technology Institute 
 * ("ARTI") at 351 West 10th Street, Indianapolis, Indiana 46202.
 *5) Products derived from this software may not be called NaradaBrokering, 
 * nor may Indiana University or Community Grids Lab or NaradaBrokering appear
 * in their name, without prior written permission of ARTI.
 * 
 *
 * Indiana University provides no reassurances that the source code provided 
 * does not infringe the patent or any other intellectual property rights of 
 * any other entity.  Indiana University disclaims any liability to any 
 * recipient for claims brought by any other entity based on infringement of 
 * intellectual property rights or otherwise.  
 *
 *LICENSEE UNDERSTANDS THAT SOFTWARE IS PROVIDED "AS IS" FOR WHICH NO 
 *WARRANTIES AS TO CAPABILITIES OR ACCURACY ARE MADE. INDIANA UNIVERSITY GIVES
 *NO WARRANTIES AND MAKES NO REPRESENTATION THAT SOFTWARE IS FREE OF 
 *INFRINGEMENT OF THIRD PARTY PATENT, COPYRIGHT, OR OTHER PROPRIETARY RIGHTS. 
 *INDIANA UNIVERSITY MAKES NO WARRANTIES THAT SOFTWARE IS FREE FROM "BUGS", 
 *"VIRUSES", "TROJAN HORSES", "TRAP DOORS", "WORMS", OR OTHER HARMFUL CODE.  
 *LICENSEE ASSUMES THE ENTIRE RISK AS TO THE PERFORMANCE OF SOFTWARE AND/OR 
 *ASSOCIATED MATERIALS, AND TO THE PERFORMANCE AND VALIDITY OF INFORMATION 
 *GENERATED USING SOFTWARE.
 */
package cgl.narada.wsinfra.wsrm;

import javax.xml.namespace.QName;

import cgl.narada.wsinfra.schemas.wsrm.SequenceAcknowledgementDocument;
import cgl.narada.wsinfra.schemas.wsrm.SequenceFaultDocument;


/** 
    This class provides a one-stop for creating all the faults that occur 
    during WSRM processing. This eliminates the need to hard-code this in 
    several places. Furthermore, if the spec changes the impact of this 
    change will be felt at far fewer places.
    
    @author Shrideep Pallickara
    $Date: 2005/07/29 22:41:30 $
    $Revision: 1.6 $
*/


public interface WsrmFaults {
  /**This fault is sent by either the RM Source or the RM Destination to 
     indicate that the endpoint that generates the fault has either encountered
     an unrecoverable condition, or has detected a violation of the protocol 
     and as a consequence, has chosen to terminate the sequence.
     
     <li>Code Sender.*/
  public SequenceFaultDocument 
  getSequenceTerminated(String identifier);
  
  
  /** Retrieve the reason associated with the fault */
  public String getSequenceTerminatedReason();
  

  /** This fault is sent by either the RM Source or the RM Destination in 
      response to a message containing an unknown sequence identifier. */
  public SequenceFaultDocument getUnknownSequence(String identifier);


  /** Retrieve the reason associated with the fault */
  public String getUnknownSequenceReason();


  /** This fault is sent by the RM Source in response to a 
      <SequenceAcknowledgement> that violates the cumulative acknowledgement 
      invariant. An example of such a violation would be a 
      SequenceAcknowledgement covering messages that have not been sent. */
  public SequenceFaultDocument 
  getInvalidAcknowledgement(SequenceAcknowledgementDocument seqAckDocument);



  /** Retrieve the reason associated with the fault */
  public String getInvalidAcknowledgementReason();



  /** This fault is sent by the RM Source to indicate that it has run out of 
      message numbers for a sequence. It is an unrecoverable error and 
      terminates the Sequence. */
  public SequenceFaultDocument getMessageNumberRollover(String identifier);
  
  
  /** Retrieve the reason associated with the fault */
  public String getMessageNumberRolloverReason();


  /** This fault is sent by the RM Source to indicate that it has run out of 
      message numbers for a sequence. 
      It is an unrecoverable error and terminates the Sequence. */
  public SequenceFaultDocument getLastMessageNumberExceeded(String identifier);

  

  /** Retrieve the reason associated with the fault */
  public String getLastMessageNumberExceededReason();



  /** This fault is sent by an RM Destination to indicate that it cannot 
      begin a requested Sequence. */
  public SequenceFaultDocument getSequenceRefused(String identifier);

  

  /** Retrieve the reason associated with the fault */
  public String getSequenceRefusedReason();


  
  /** This fault is sent by an RM Destination to indicate that it cannot 
      begin a requested Sequence. */
  public SequenceFaultDocument getCreateSequenceRefused();
  

  /** Retrieve the reason associated with the fault */
  public String  getCreateSequenceRefusedReason();


  /**This is a fault send by an RM node when it encounters an invalid 
     message. */
  public SequenceFaultDocument getInvalidMessage();


  /** Retrieves the Fault:Code for the sender */
  public QName getSoapSenderQName();


  /** Retrieves the Fault:Code for the receiver */
  public QName getSoapReceiverQName();
}





